package pso;

import evolution.algorithm.Iterative;
import evolution.problem.OptimizationProblem;
import evolution.stop.StopCondition;
import pso.listenable.PropertyChangeListenable;
import pso.particle.Particle;
import pso.position.PositionUpdateStrategy;
import pso.velocity.VelocityUpdateStrategy;

public interface PSOAlgorithm extends Iterative, Runnable,
		PropertyChangeListenable {

	public Particle[] getSwarm();

	public void setSwarm(Particle[] swarm);

	public VelocityUpdateStrategy getVelocityUpdateStrategy();

	public void setVelocityUpdateStrategy(
			VelocityUpdateStrategy velocityUpdateStrategy);

	public PositionUpdateStrategy getPositionUpdateStrategy();

	public void setPositionUpdateStrategy(
			PositionUpdateStrategy positionUpdateStrategy);

	public StopCondition<Iterative> getStopCondition();

	public void setStopCondition(StopCondition<Iterative> stopCondition);
	
	public OptimizationProblem getOptimizationProblem();
}
